/**
 *  @Package: com.yidu.drug.action
 *  @author: Administrator
 *  @date: 2018年8月14日 上午9:45:04
 */
package com.yidu.drug.action;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.drug.common.Page;
import com.yidu.drug.common.Tools;
import com.yidu.drug.model.DrugManagerModel;
import com.yidu.drug.model.DrugRoleModel;
import com.yidu.drug.model.DrugRoleModuleModel;
import com.yidu.drug.model.TreeNode;
import com.yidu.drug.service.DrugModuleService;
import com.yidu.drug.service.DrugRoleService;



/**
 * 类的描述 角色action层
 * @author 祝浪
 * @date 2018年8月14日
 */
@Controller
@RequestMapping("role")
public class DrugRoleAction {
	/**
	 * 角色Service接口
	 */
	@Resource
	private DrugRoleService roleService;
	/**
	 * 模块Service接口
	 */
	@Resource
	private DrugModuleService moduleService;
	
	
	/**
	 * 分页查询所有
	 * @param page 页数
	 * @param limit 行数
	 * @param role 角色对象
	 * @return layui格式的map集合
	 */
	@RequestMapping("/roleFindAll")
	@ResponseBody
	public Map<String,Object> roleFindAll(HttpSession session,int page,int limit,DrugRoleModel role){
		
		//分页对象
		Page pages= new Page();
		//获取页面的页数
		pages.setPage(page);
		//获取页面的行数
		pages.setRows(limit);
		//调用Service的方法查询所有角色
		List<DrugRoleModel> list=roleService.findAll(session,role,pages);
		//创建一个Map集合
		Map<String,Object> map=new HashMap<String,Object>();
		//得到登录用户的信息
		DrugManagerModel manager=(DrugManagerModel) session.getAttribute("manager");
		//默认row为0
		int row=0;
		//判断登录用户信息是否为空
		if(manager!=null){
			//如果用户的分店ID不等于总公司的ID那就将集合的长度赋值给row
			if(!"1".equals(manager.getFilId())){
				
				row=list.size();
			}else{
				//否则就查询所有行数
				row=roleService.findRow(role);
			}
		}
		
		//加入信息到Map集合
		map.put("code",0);
		map.put("msg","");
		map.put("count",row);
		map.put("data", list);
		return map;
	}
	/**
	 * 删除角色的方法
	 * @param id 角色ID
	 * @return
	 */
	@RequestMapping("/roleRemove")
	public String roleRemove(String id){
		//判断Id是否为空
		if(id!=null){
			//如果不为null就调用service的方法根据Id删除角色
			roleService.deleteRole(id);
			//返回ok
			return "ok";
		}
		//否则返回no
		return "no";
		
	}
	/**
	 * 模块树形结构查询
	 * @param session 存储空间
	 * @param id 模块ID
	 * @return 树结构的集合
	 * @throws IOException IO异常
	 */
	@RequestMapping("/moduleTree")
	@ResponseBody
	public List<TreeNode> moduleTree(HttpSession session,String id) throws IOException{
		//默认查询第一级 将上级id赋值为默认的main
		String pid = "main";
		//如果模块ID不为空货字符空
		if(id!=null&&id!=""){
			//根据角色ID调用Service查询角色模块的信息
			List<DrugRoleModuleModel> lists=roleService.findRoleModule(id);
			//检查询到的角色模块信息传入模块Service方法查询模块信息
			List<TreeNode> list = moduleService.findAllModule(session,pid,lists);
			//为避免存在缓存将Id赋值为字符空
			id="";
			return list;
		}else{
			//如果id为空就从最上级开始查
			//调用模型Service的findAllModule的方法查询模块信息
			List<TreeNode> list = moduleService.findAllModule(session,pid);
			//为避免存在缓存将Id赋值为字符空
			id="";
			return list;
		}
		
	}
	/**
	 * 增加角色方法
	 * @param session 存储空间
	 * @param vo 角色
	 * @return 跳转页面的
	 * @throws IOException 异常
	 */
	@RequestMapping("/addRole")
	public String addRole(HttpSession session,DrugRoleModel vo) throws IOException{
		//得到登录的用户信息
		DrugManagerModel manUser= (DrugManagerModel) session.getAttribute("manager");
		//将用户名称加入角色的操作人中
		vo.setOper(manUser.getManUser());
		//调用Service层的方法增加角色
		roleService.addRole(vo);
		//重定向到角色页面
		return "redirect:../pages/lobby/drugRole.html";
	}
	/**
	 * 修改角色方法
	 * @param session 存储空间
	 * @param vo 角色对象
	 * @return 跳转页面的路径
	 */
	@RequestMapping("/updateRole")
	public String updateRole(HttpSession session,DrugRoleModel vo){
		//得到登录的用户信息
		DrugManagerModel manUser= (DrugManagerModel) session.getAttribute("manager");
		//加入角色的操作人的姓名
		vo.setOper(manUser.getManUser());
		//调用方法修改角色
		roleService.updateRole(vo);
		//将角色中的模块Ids通过字符串分割 使用,分隔
		String[] ids=vo.getModuleIds().split(",");
		//创建一个角色模块集合
		List<DrugRoleModuleModel> list=new ArrayList<DrugRoleModuleModel>();
		//将得到的IDS数组循环
		for(int i=0; i<ids.length;i++){
			//创建一个角色模块对象
			DrugRoleModuleModel erm=new DrugRoleModuleModel();
			//将循环出来的ID加入到角色模块对象的模块id中
			erm.setModId(ids[i]);
			//加入一个角色模块Id（工具类得到UUID）
			erm.setRmId(Tools.getRandomUUID());
			//加入一个角色ID
			erm.setRoleId(vo.getRoleId());
			//将角色模块加入到
			list.add(erm);
		}
		//调用角色Service方法加入角色模块信息
		roleService.addRoleModule(list);
		//跳转到本页面
		return "redirect:../pages/lobby/drugRole.html";
	}
}
